home *** CD-ROM | disk | FTP | other *** search
/ Turnbull China Bikeride / Turnbull China Bikeride - Disc 2.iso / BARNET / FREENET / BRODIE / INTERNET / !InternetD / c / udp_test < prev   
Text File  |  1995-06-08  |  4KB  |  137 lines

  1. /* udp_test.c */
  2. #define socketclose close
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <ctype.h>
  6. #include "inetd.h"
  7.  
  8. const int verbose = 0;
  9.  
  10. static void wait_for_data(int s)
  11. {
  12.         fd_set    f;
  13.         struct  timeval timeout;
  14.  
  15.         do {
  16.                 FD_ZERO(&f); FD_SET(s, &f);
  17.                 timerclear(&timeout);
  18.         } while (select(FD_SETSIZE, &f, NULL, NULL, &timeout)==0);
  19.  
  20.     if (verbose) printf("data has arrived.\n");
  21. }
  22.  
  23. int             s;
  24. struct sockaddr_in    s_in, localhost;
  25. int            size = 16, sz;
  26. char            buf[512];
  27.  
  28.  
  29. void port_daytime(void)
  30. {
  31.         s_in = localhost;
  32.         s_in.sin_port = htons(13);
  33.         sendto(s, buf, 1, 0, (struct sockaddr *)&s_in, 16);
  34.         wait_for_data(s);
  35.         sz = 16;
  36.         size = recvfrom(s, buf, 512, 0, (struct sockaddr *)&s_in, &sz);
  37.     if (size>0) {
  38.             buf[size] = '\0';
  39.             printf("%s", buf);
  40.         }
  41. }
  42.  
  43. void port_chargen(void)
  44. {
  45.         if (verbose) printf("chargening\n");
  46.     buf[0] = '\0';
  47.     s_in = localhost; s_in.sin_port = htons(19);
  48.         if (sendto(s, buf, 1, 0, (struct sockaddr *)&s_in, 16) == -1) {
  49.                 printf("problem with sendto\n");
  50.         }
  51.         if (verbose) printf("waiting for response\n");
  52.         wait_for_data(s);
  53.         sz = 16;
  54.         s_in = localhost; s_in.sin_port = htons(7);
  55.         size = recvfrom(s, buf, 512, 0, (struct sockaddr *)&s_in, &sz);
  56.     if (size>0) { buf[size] = '\0';    printf("%s\n", buf); }
  57.  
  58. }
  59.  
  60. void port_echo(void)
  61. {
  62.         if (verbose) printf("echoing\n");
  63.     strcpy(buf, "0123456789--Data--to--Echo--9876543210");
  64.     s_in = localhost; s_in.sin_port = htons(7);
  65.         if (sendto(s, buf, strlen(buf), 0, (struct sockaddr *)&s_in, 16) == -1) {
  66.                 printf("problem with sendto\n");
  67.         }
  68.         if (verbose) printf("waiting for response\n");
  69.         wait_for_data(s);
  70.         sz = 16;
  71.         s_in = localhost; s_in.sin_port = htons(7);
  72.         size = recvfrom(s, buf, 512, 0, (struct sockaddr *)&s_in, &sz);
  73.     if (size>0) { buf[size] = '\0';    printf("%s\n", buf); }
  74.  
  75. }
  76.  
  77. void port_syslog(void)
  78. {
  79.     if (verbose) printf("syslogging\n");
  80.     strcpy(buf, "<--syslog'ed datagram-->");
  81.     s_in = localhost; s_in.sin_port = htons(514);
  82.     if (sendto(s, buf, strlen(buf), 0, (struct sockaddr *)&s_in, 16) == -1) {
  83.             printf("problem with sendto(syslog)\n");
  84.     }
  85. }
  86.  
  87. void port_rwall(void)
  88. {
  89.     if (verbose) printf("rwalling\n");
  90.     strcpy(buf, "<--rwall'ed message-->");
  91.     s_in = localhost; s_in.sin_port = htons(533);
  92.     if (sendto(s, buf, strlen(buf), 0, (struct sockaddr *)&s_in, 16) == -1) {
  93.             printf("problem with sendto(syslog)\n");
  94.     }
  95. }
  96.  
  97. int prompt(char *message)
  98. {
  99.         char *r;
  100.  
  101.         printf("%s (Y/N/count) ? ", message);
  102.         r = fgets(buf, 512, stdin);
  103.     if (!r) return 0;
  104.         if (isdigit(*r)) return atoi(r);
  105.         return toupper(*r) == 'Y';
  106. }
  107.  
  108. int main(int argc, char **argv)
  109. {
  110.     int loop;
  111.  
  112.         s = socket(AF_INET, SOCK_DGRAM, 0);
  113.         if (s == -1) {
  114.                 fprintf(stderr, "Unable to create\n");
  115.                 return 1;
  116.         }
  117.  
  118.     localhost.sin_family = AF_INET;
  119.     localhost.sin_port   = 0;
  120.     localhost.sin_addr.s_addr   = 0x0100007f;
  121.     strcpy(localhost.sin_zero, "\0\0\0\0\0\0\0");
  122.  
  123.     /*-----*/
  124.  
  125.     for (loop=prompt("daytime"); loop>0; --loop)     port_daytime();
  126.     for (loop=prompt("chargen"); loop>0; --loop)     port_chargen();
  127.     for (loop=prompt("echo"   ); loop>0; --loop)     port_echo();
  128.     for (loop=prompt("syslog" ); loop>0; --loop)     port_syslog();
  129.     for (loop=prompt("rwall"  ); loop>0; --loop)     port_rwall();
  130.  
  131.     /*-----*/
  132.  
  133.         shutdown(s,2);
  134.         close(s);
  135.     return 0;
  136. }
  137.